﻿// MCP 协议服务端所需的核心特性与类型。
using ModelContextProtocol.Server;
// 用于支持 [Description] 特性，提供描述信息。
using System.ComponentModel;

namespace edan.zhjk.Commons.MCPService.Files
{
    /// <summary>
    /// 标记此类为 MCP 服务器可用的工具类型，客户端可通过协议调用其中的方法。
    /// </summary>
    [McpServerToolType]
    public sealed class FileTool
    {
        /// <summary>
        /// 读取指定路径的文件内容。
        /// </summary>
        /// <param name="path">要读取的文件的完整路径</param>
        /// <returns>文件的内容字符串</returns>
        [McpServerTool, Description("读取文件")]
        public static async Task<string> ReadFile([Description("文件路径")] string path)
        {
            // 检查文件是否存在，若不存在则抛出异常
            if (!File.Exists(path))
                throw new FileNotFoundException("文件不存在");
            // 异步读取文件内容并返回
            return await File.ReadAllTextAsync(path);
        }

        /// <summary>
        /// 将指定内容保存到指定路径的文件中。
        /// 如果目标目录不存在，则自动创建。
        /// </summary>
        /// <param name="path">要保存的文件路径</param>
        /// <param name="content">要写入文件的内容字符串</param>
        /// <returns>操作结果信息</returns>
        [McpServerTool, Description("保存文件")]
        public static async Task<string> SaveFile([Description("文件路径")] string path, [Description("内容")] string content)
        {
            try
            {
                // 获取文件所在目录路径
                var directory = Path.GetDirectoryName(path);
                // 如果目录不为空且不存在，则创建目录
                if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory))
                {
                    Directory.CreateDirectory(directory);
                }
                // 使用异步方式将内容写入文件（覆盖模式）
                await File.WriteAllTextAsync(path, content);
                // 返回成功提示
                return $"文件已成功保存至: {path}";
            }
            catch (Exception ex)
            {
                // 捕获所有异常并返回错误信息，防止崩溃并便于调试
                return $"保存文件时发生错误: {ex.Message}";
            }
        }
    }
}
